home *** CD-ROM | disk | FTP | other *** search
/ Amiga Mag HDD Backup / Amiga Mag HDD Backup.zip / Amiga Mag HDD Backup / Alexander.img.bin / Alexander.img / tech 4.1 editorial Archive.sit / Nee / dpmathmacros.i < prev    next >
Text File  |  1993-07-16  |  7KB  |  411 lines

  1.  
  2. ;LISTING 1
  3. ;MATHIEEEDOUBBAS OFFSETS
  4. dpfix    equ  -30
  5. dpflt    equ  -36
  6. dpcmp    equ  -42
  7. dptst    equ  -48
  8. dpabs    equ  -54
  9. dpneg    equ  -60
  10. dpadd    equ  -66
  11. dpsub    equ  -72
  12. dpmul    equ  -78
  13. dpdiv    equ  -84
  14.  
  15. ;macros
  16. dpmathlib   macro          ;(routine)
  17.    movea.l  dpmathbase(pc),a6
  18.    jsr      \1(a6)
  19.    endm
  20. movedp   macro
  21.    ifc      '\1','d0'      ;<d0,register>
  22.    ifc      '\2','d2'
  23.    move.l   d0,d2
  24.    move.l   d1,d3
  25.    mexit
  26.    endc
  27.    ifc      '\2','d4'
  28.    move.l   d0,d4
  29.    move.l   d1,d5
  30.    mexit
  31.    endc
  32.    ifc      '\2','d6'
  33.    move.l   d0,d6
  34.    move.l   d1,d7
  35.    mexit
  36.    endc
  37.    endc
  38.    ifc      '\1','d2'      ;<d2,register>
  39.    ifc      '\2','d0'
  40.    move.l   d2,d0
  41.    move.l   d3,d1
  42.    mexit
  43.    endc
  44.    ifc      '\2','d4'
  45.    move.l   d2,d4
  46.    move.l   d3,d5
  47.    mexit
  48.    endc
  49.    ifc      '\2','d6'
  50.    move.l   d2,d6
  51.    move.l   d3,d7
  52.    mexit
  53.    endc
  54.    endc
  55.    ifc      '\1','d4'      ;<d4,register>
  56.    ifc      '\2','d0
  57.    move.l   d4,d0
  58.    move.l   d5,d1
  59.    mexit
  60.    endc
  61.    ifc      '\2','d2'
  62.    move.l   d4,d2
  63.    move.l   d5,d3
  64.    mexit
  65.    endc
  66.    ifc      '\2','d6'
  67.    move.l   d4,d6
  68.    move.l   d5,d7
  69.    mexit
  70.    endc
  71.    endc
  72.    ifc      '\1','d6'      ;<d6,register>
  73.    ifc      '\2','d0'
  74.    move.l   d6,d0
  75.    move.l   d7,d1
  76.    mexit
  77.    endc
  78.    ifc      '\2','d2'
  79.    move.l   d6,d2
  80.    move.l   d7,d3
  81.    mexit
  82.    endc
  83.    ifc      '\2','d4'
  84.    move.l   d6,d4
  85.    move.l   d7,d5
  86.    mexit
  87.    endc
  88.    endc
  89.    ifeq     NARG-2
  90.    ifc      '\2','d0'      ;<label,register>
  91.    move.l   \1(pc),d0
  92.    move.l   \1+4(pc),d1
  93.    mexit
  94.    endc
  95.    ifc      '\2','d2'
  96.    move.l   \1(pc),d2
  97.    move.l   \1+4(pc),d3
  98.    mexit
  99.    endc
  100.    ifc      '\2','d4'
  101.    move.l   \1(pc),d4
  102.    move.l   \1+4(pc),d5
  103.    mexit
  104.    endc
  105.    ifc      '\2','d6'
  106.    move.l   \1(pc),d6
  107.    move.l   \1+4(pc),d7
  108.    mexit
  109.    endc
  110.    move.l   \1(pc),\2          ;<label1,label2>
  111.    move.l   \1+4(pc),\2+4
  112.    mexit
  113.    endc
  114.    ifeq     NARG-1         ;<label>
  115.    move.l   d0,\1          ;d0 -> label1
  116.    move.l   d1,\1+4        ;d1 -> label1a
  117.    endc
  118.    endm
  119. move2 macro
  120.    move.l   \1(pc),d0
  121.    move.l   \1+4(pc),d1
  122.    move.l   \2(pc),d2
  123.    move.l   \2+4(pc),d3
  124.    endm
  125. move1 macro                ;<label>
  126.    move.l   \1(pc),d2
  127.    move.l   \1+4(pc),d3
  128.    endm
  129. move0 macro
  130.    move.l   \1(pc),d0
  131.    move.l   \1+4(pc),d1
  132.    endm
  133. adddp  macro
  134.    ifeq     NARG-2         ;<label1,label2>
  135.    move2    \1,\2
  136.    endc
  137.    ifeq     NARG-1         ;<label>
  138.    move1    \1
  139.    endc
  140.    dpmathlib   dpadd
  141.    endm
  142. subdp  macro
  143.    ifeq     NARG-2         ;<label1,label2>
  144.    move2    \1,\2
  145.    endc
  146.    ifeq     NARG-1         ;<label>
  147.    move1    \1
  148.    endc
  149.    dpmathlib   dpsub
  150.    endm
  151. muldp  macro
  152.    ifeq     NARG-2         ;<label1,label2>
  153.    move2    \1,\2
  154.    endc
  155.    ifeq     NARG-1         ;<label>
  156.    move1    \1
  157.    endc
  158.    dpmathlib   dpmul
  159.    endm
  160. divdp  macro
  161.    ifeq     NARG-2         ;<label1,label2>
  162.    move2    \1,\2
  163.    endc
  164.    ifeq     NARG-1         ;<label>
  165.    move1    \1
  166.    endc
  167.    dpmathlib   dpdiv
  168.    endm
  169. fltdp  macro
  170.    ifeq     NARG-1         ;<value>
  171.    move.l   #\1,d0
  172.    endc
  173.    dpmathlib   dpflt
  174.    endm
  175. fixdp    macro
  176.    ifeq     NARG-1         ;<label>
  177.    move0    \1
  178.    endc
  179.    dpmathlib   dpfix
  180.    endm
  181. absdp  macro
  182.    ifeq     NARG-1         ;<label>
  183.    move0    \1
  184.    endc
  185.    dpmathlib   dpabs
  186.    endm
  187. negdp  macro
  188.    ifeq     NARG-1         ;<label>
  189.    move0    \1
  190.    endc
  191.    dpmathlib   dpneg
  192.    endm
  193. cmpdp  macro           
  194.    ifeq     NARG-2         ;<label1,label2>
  195.    move2    \1,\2
  196.    endc
  197.    ifeq     NARG-1         ;<label>
  198.    move1    \1
  199.    endc
  200.    dpmathlib   dpcmp
  201.    endm
  202. tstdp  macro
  203.    ifeq     NARG-1         ;<label>
  204.    move0    \1
  205.    endc
  206.    dpmathlib   dptst
  207.    endm
  208.  
  209. ;MATHIEEEDOUBTRANS OFFSETS
  210. dpatan   equ  -30
  211. dpsin    equ  -36
  212. dpcos    equ  -42
  213. dptan    equ  -48
  214. dpsincos equ  -54
  215. dpsinh   equ  -60
  216. dpcosh   equ  -66
  217. dptanh   equ  -72
  218. dpexp    equ  -78
  219. dplog    equ  -84
  220. dppow    equ  -90
  221. dpsqrt   equ  -96
  222. dptieee  equ  -102
  223. dpfieee  equ  -108
  224. dpasin   equ  -114
  225. dpacos   equ  -120
  226. dplog10  equ  -126
  227.  
  228. ;macros
  229. dptranslib  macro
  230.    movea.l  dptransbase(pc),a6 ;<routine>
  231.    jsr      \1(a6)
  232.    endm
  233.  
  234. sindp macro
  235.    ifeq     NARG-1         ;<label>
  236.    move0   \1
  237.    endc
  238.    dptranslib  dpsin
  239.    endm
  240. cosdp macro
  241.    ifeq     NARG-1         ;<label>
  242.    move0    \1
  243.    endc
  244.    dptranslib  dpcos
  245.    endm
  246. tandp macro
  247.    ifeq     NARG-1         ;<label>
  248.    move0    \1
  249.    endc
  250.    dptranslib  dptan
  251.    endm
  252. sincosdp macro
  253.    ifeq     NARG-1         ;<label>
  254.    move0    \1
  255.    endc
  256.    dptranslib  dpsincos
  257.    endm
  258. asindp   macro
  259.    ifeq     NARG-1         ;<label>
  260.    move0    \1
  261.    endc
  262.    dptranslib  dpasin
  263.    endm
  264. acosdp   macro
  265.    ifeq     NARG-1         ;<label>
  266.    move0    \1
  267.    endc
  268.    dptranslib  dpacos
  269.    endm
  270. atandp   macro
  271.    ifeq     NARG-1         ;<label>
  272.    move0    \1
  273.    endc
  274.    dptranslib  dpatan
  275.    endm
  276. sinhdp   macro
  277.    ifeq     NARG-1         ;<label>
  278.    move0    \1
  279.    endc
  280.    dptranslib  dpsinh
  281.    endm
  282. coshdp   macro
  283.    ifeq     NARG-1         ;<label>
  284.    move0    \1
  285.    endc
  286.    dptranslib  dpcosh
  287.    endm
  288. tanhdp   macro
  289.    ifeq     NARG-1         ;<label>
  290.    move0    \1
  291.    endc
  292.    dptranslib  dptanh
  293.    endm
  294. sqrtdp   macro
  295.    ifeq     NARG-1         ;<label>
  296.    move0    \1
  297.    endc
  298.    dptranslib  dpsqrt
  299.    endm
  300. expdp macro
  301.    ifeq     NARG-1         ;<label>
  302.    move0    \1
  303.    endc
  304.    dptranslib  dpexp
  305.    endm
  306. powdp macro
  307.    ifeq     NARG-2         ;<label1,label2>
  308.    move2    \1,\2
  309.    endc
  310.    ifeq     NARG-1         ;<label>
  311.    move1    \1
  312.    endc
  313.    dptranslib  dppow
  314.    endm
  315. logdp macro
  316.    ifeq     NARG-1         ;<label>
  317.    move0    \1
  318.    endc
  319.    dptranslib  dplog
  320.    endm
  321. log10dp  macro
  322.    ifeq     NARG-1         ;<label>
  323.    move0    \1
  324.    endc
  325.    dptranslib  dplog10
  326.    endm
  327. convertdp   macro
  328.    movem.l  d2-d7,-(sp)
  329.    moveq    #0,d0
  330.    moveq    #0,d1
  331.    moveq    #0,d4
  332.    moveq    #0,d5
  333.    suba.l   a2,a2
  334.    cmpi.b   #'-',(a0)
  335.    bne.s    positive\@
  336.    bset     #31,d4
  337.    addq.l   #1,a0
  338. positive\@
  339. getdigit\@
  340.    move.b   (a0)+,d5
  341.    cmpi.b   #'.',d5
  342.    bne      testdigit\@
  343.    move.w   #1,a2
  344.    moveq    #0,d7
  345.    bra      getdigit\@
  346. testdigit\@
  347.    cmpi.b   #'9',d5
  348.    bhi.s    zerocheck\@
  349.    cmpi.b   #'0',d5
  350.    blt.s    zerocheck\@
  351.    andi.l   #$0f,d5
  352.    movedp   d0,d2
  353.    asl.l    #1,d1
  354.    roxl.l   #1,d0
  355.    asl.l    #1,d3
  356.    roxl.l   #1,d2
  357.    asl.l    #1,d3
  358.    roxl.l   #1,d2
  359.    asl.l    #1,d3
  360.    roxl.l   #1,d2
  361.    moveq    #0,d6
  362.    add.l    d3,d1
  363.    addx.l   d2,d0
  364.    add.l    d5,d1
  365.    addx.l   d6,d0
  366.  
  367.    addq.w   #1,d7
  368.    cmpi.w   #16,d7
  369.    bne      getdigit\@
  370. dperror\@
  371. ;  moveq    #1,d6
  372. ;  rts
  373. zerocheck\@
  374.    movea.l  a0,a5
  375.    tst.l    d1
  376.    bne.s    zerocheck1\@
  377.    tst.l    d0
  378.    beq.s    dpdone\@
  379. zerocheck1\@
  380.    move.l   #$43f,d6
  381. zerocheck2\@
  382.    subq.l   #1,d6
  383.    asl.l    #1,d1
  384.    roxl.l   #1,d0
  385.    bcc.s    zerocheck2\@
  386.    moveq    #11,d5
  387.  
  388. shiftdown\@
  389.    lsr.l    #1,d0
  390.    roxr.l   #1,d1
  391.    dbra     d5,shiftdown\@
  392.  
  393.    swap     d6
  394.    asl.l    #4,d6
  395.    or.l     d6,d0
  396.    cmpa     #0,a2
  397.    beq.s    dosign\@
  398.    subq.l   #1,d7
  399.    bmi.s    dosign\@
  400. fractionalize\@
  401.    move.l   #$40240000,d2
  402.    moveq    #0,d3
  403.    divdp
  404.    dbra.s   d7,fractionalize\@
  405. dosign\@
  406.    or.l     d4,d0
  407. dpdone\@
  408.    moveq    #0,d6
  409.    movem.l  (sp)+,d2-d7
  410.    endm
  411.